// index.js
// 获取app实例
const app = getApp();

Page({
  data: {
    showmsg: false,
    // 存储章节列表数据
    chapters: [],
    totalHeaderHeightall: "",
    showModal: false, // 弹窗显示控制
    showActivityModal: false, // 活动弹窗显示控制
    animation: {}, // 弹窗动画
    // 学校列表数据
    schools: [],
    selectedSchoolId: 0,
    userSchoolName: '中南大学', // 默认学校
    userSchoolId: 0,
    // 用户信息
    isLoggedIn: false,
    userInfo: null,
    // 用户科目信息
    userSubjects: [],
    // 当前选中的科目索引
    selectedSubjectIndex: 0,
    // 轮播图数据
    banners: [
      {
        id: 1,
        imageUrl: 'https://exam-1304576422.cos.ap-guangzhou.myqcloud.com/static/banner1.png',
        linkUrl: '/service/donation/donation'
      },
      {
        id: 2,
        imageUrl: 'https://exam-1304576422.cos.ap-guangzhou.myqcloud.com/static/banner3.png',
        linkUrl: '/service/activity/activity'
      },
      {
        id: 3,
        imageUrl: 'https://exam-1304576422.cos.ap-guangzhou.myqcloud.com/static/banner2.png',
        linkUrl: ''
      }
    ],
    currentBannerIndex: 0
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function () {
    // this.onImageTap()
    // 创建动画实例
    // this.getbanner();
    this.animation = wx.createAnimation({
      duration: 300,
      timingFunction: 'ease',
    });

    this.setData({
      totalHeaderHeightall: app.globalData?.totalHeaderHeight
    })
    // 打印全局头部高度变量
    console.log('全局头部总高度:', app.globalData?.totalHeaderHeight);



    // 先检查用户登录状态，获取用户学校信息
    this.checkLoginStatus();

    // 然后加载学校列表，此时userSchoolId已经设置
    this.loadSchoolList();
  },

  /**
   * 轮播图切换事件
   */
  onBannerChange: function (e) {
    this.setData({
      currentBannerIndex: e.detail.current
    });
  },
  /**
   * 获取轮播图
   */
  getbanner() {
    app.api.getBannerList({ title: "首页" }).then(res => {
      this.setData({
        banners: res.data.reverse()
      })
    }).catch(err => {
      console.error('获取轮播图失败:', err);
    });
  },
  /**
   * 点击轮播图
   */
  onBannerTap: function (e) {
    const { index } = e.currentTarget.dataset;
    const banner = this.data.banners[index];

    // 如果有跳转链接则跳转，否则执行原广告点击逻辑
    if (banner.linkUrl) {
      if (!this.data.isLoggedIn) {
        // 未登录则跳转到登录页面
        this.goToLogin();
        return;
      }
      wx.navigateTo({
        url: banner.linkUrl
      });
    } else {
      this.onGuanggaoTap();
    }
  },
  juankuan: function () {
    wx.navigateTo({
      url: '/service/donation/donation'
    });
  },
  /**
   * 检查用户登录状态
   */
  checkLoginStatus: function () {
    // 从缓存中获取token
    const token = wx.getStorageSync('userToken');

    if (token) {
      // 有token时，从接口获取最新的用户信息
      this.getuser()
    } else {
      // 没有token，清除缓存的用户信息
      wx.removeStorageSync('userInfo');
      this.setData({
        isLoggedIn: false,
        userInfo: null,
        userSchoolId: 0,
        userSchoolName: '中南大学'
      });
    }
  },
  getuser() {
    const that = this;
    app.api.getUserInfo().then(res => {
      console.log('获取用户信息成功:', res);

      // 检查响应数据
      if (res && res.code === 200 && res.data) {
        // 更新用户信息到缓存（可选，用于页面刷新时快速显示）
        wx.setStorageSync('userInfo', res.data);

        that.setData({
          isLoggedIn: true,
          userInfo: res.data
        });

        // 更新用户学校信息
        if (res.data.school_id) {
          that.setData({
            userSchoolId: res.data.school_id,
            userSchoolName: res.data.school_name || that.data.userSchoolName
          });

          // 更新学校列表中对应项的选中状态
          if (that.data.schools.length > 0) {
            const updatedSchools = that.data.schools.map(item => ({
              ...item,
              selected: item.id === res.data.school_id
            }));
            that.setData({ schools: updatedSchools });
          }
        }

        // 更新用户科目信息
        if (res.data.subjects && Array.isArray(res.data.subjects)) {
          that.setData({
            userSubjects: res.data.subjects,
            // 默认选中第一个科目
            selectedSubjectIndex: 0
          });

          // 如果有科目，加载第一个科目的章节列表
          console.log(res.data.subjects)
          if (res.data.subjects.length > 0) {
            that.loadSubjectChapters(0);
          } else {
            that.setData({
              chapters: []
            });

          }
        }
      } else {
        // 接口返回错误，清除token和用户信息
        wx.removeStorageSync('userToken');
        wx.removeStorageSync('userInfo');
        that.setData({
          isLoggedIn: false,
          userInfo: null,
          userSchoolId: 0,
          userSchoolName: '中南大学',
          userSubjects: [],
          selectedSubjectIndex: 0
        });
      }
    }).catch(err => {
      console.error('获取用户信息失败:', err);
      // 网络错误，尝试使用缓存的用户信息（如果有）
      const cachedUserInfo = wx.getStorageSync('userInfo');
      if (cachedUserInfo) {
        that.setData({
          isLoggedIn: true,
          userInfo: cachedUserInfo
        });
        if (cachedUserInfo.school_id) {
          that.setData({
            userSchoolId: cachedUserInfo.school_id,
            userSchoolName: cachedUserInfo.school_name || that.data.userSchoolName
          });

          // 更新学校列表中对应项的选中状态
          if (that.data.schools.length > 0) {
            const updatedSchools = that.data.schools.map(item => ({
              ...item,
              selected: item.id === cachedUserInfo.school_id
            }));
            that.setData({ schools: updatedSchools });
          }
        }

        // 更新用户科目信息
        if (cachedUserInfo.subjects && Array.isArray(cachedUserInfo.subjects)) {
          that.setData({
            userSubjects: cachedUserInfo.subjects,
            // 默认选中第一个科目
            selectedSubjectIndex: 0
          });

          // 如果有科目，加载第一个科目的章节列表
          if (cachedUserInfo.subjects.length > 0) {
            that.loadSubjectChapters(0);
          }
        }
      } else {
        that.setData({
          isLoggedIn: false,
          userInfo: null
        });
      }
    });
  },
  /**
   * 生命周期函数--监听页面显示
   * 页面显示时需要检查登录状态，确保退出登录后能正确显示登录按钮
   * 同时需要刷新章节列表，确保从答题页面返回后数据是最新的
   */
  onShow: function () {
    // 快速检查登录状态（不调用接口，只检查本地缓存）
    const token = wx.getStorageSync('userToken');
    const cachedUserInfo = wx.getStorageSync('userInfo');

    if (token && cachedUserInfo) {
      this.setData({
        isLoggedIn: true,
        userInfo: cachedUserInfo,
        userSchoolId: cachedUserInfo.school_id || 0,
        userSchoolName: cachedUserInfo.school_name || '中南大学',
        userSubjects: cachedUserInfo.subjects || []
      });

      // 如果用户已登录且有科目数据，刷新章节列表
      if (this.data.userSubjects && this.data.userSubjects.length > 0) {
        this.loadSubjectChapters(this.data.selectedSubjectIndex || 0);
      }
    } else {
      // 没有token或用户信息，设置为未登录状态
      this.setData({
        isLoggedIn: false,
        userInfo: null
      });
    }
  },

  /**
   * 加载学校列表
   */
  loadSchoolList: function () {
    const that = this;
    app.api.getSchoolList().then(res => {
      console.log('获取学校列表成功:', res);
      // 检查res是否包含data属性且为数组
      if (res && res.data && Array.isArray(res.data)) {
        // 为学校列表添加selected属性，并标记用户当前学校
        const schoolsWithSelected = res.data.map(item => ({
          ...item,
          selected: item.id === that.data.userSchoolId
        }));

        // 确保用户学校名称正确显示
        const userSchool = schoolsWithSelected.find(item => item.id === that.data.userSchoolId);
        if (userSchool) {
          that.setData({
            userSchoolName: userSchool.name || userSchool.school_name
          });
        }

        that.setData({
          schools: schoolsWithSelected
        });
      } else {
        console.error('学校列表数据格式错误:', res);
      }
    }).catch(err => {
      console.error('获取学校列表失败:', err);
    });
  },

  onTikuTap: function () {    // 检查用户是否已登录
    if (!this.data.isLoggedIn) {
      // 未登录则跳转到登录页面
      this.goToLogin();
      return;
    }

    wx.navigateTo({
      url: '/pages/tiku/tiku'
    });
  },

  /**
   * 图片点击事件，显示活动弹窗
   */
  onImageTap: function () {
    // 检查用户是否已登录
    if (!this.data.isLoggedIn) {
      // 未登录则跳转到登录页面
      this.goToLogin();
      return;
    }

    this.setData({
      showActivityModal: true
    });
  },

  /**
   * 活动弹窗关闭回调
   */
  onActivityModalClose: function () {
    this.setData({
      showActivityModal: false
    });
  },

  /**
   * 生命周期函数--监听页面渲染完成
   */
  onReady: function () {
    // 页面渲染完成后，获取自定义头部组件实例
    this.headerComponent = this.selectComponent('#customHeader');
  },

  /**
   * 初始化系统信息
   */
  initSystemInfo: function () {
    try {
      // 获取系统信息
      const systemInfo = wx.getSystemInfoSync();
      // 获取状态栏高度
      const statusBarHeight = systemInfo.statusBarHeight;

      // 获取胶囊按钮位置信息
      const menuButtonInfo = wx.getMenuButtonBoundingClientRect();

      // 计算导航栏高度
      const navBarHeight = statusBarHeight + (menuButtonInfo.bottom - menuButtonInfo.top);

      // 设置默认内容padding-top，确保内容不被头部遮挡
      const contentPaddingTop = navBarHeight + 20; // 额外加20rpx的边距

      this.setData({
        statusBarHeight: statusBarHeight,
        navBarHeight: navBarHeight,
        menuButtonWidth: menuButtonInfo.width,
        contentPaddingTop: contentPaddingTop
      });
    } catch (e) {
      console.error('获取系统信息失败:', e);
      // 降级处理，使用默认高度
      this.setData({
        statusBarHeight: 20,
        navBarHeight: 64,
        menuButtonWidth: 80,
        contentPaddingTop: 84
      });
    }
  },

  /**
   * 监听头部高度变化事件
   */
  onHeaderHeightChange: function (e) {
    const { totalHeight, statusBarHeight, headerHeight } = e.detail;

    // 更新页面数据
    this.setData({
      statusBarHeight: statusBarHeight,
      navBarHeight: totalHeight,
      contentPaddingTop: totalHeight + 20 // 额外加20rpx的边距
    });
  },

  /**
   * 点击搜索框事件处理函数
   */
  onSearchTap: function () {
    // 检查用户是否已登录
    if (!this.data.isLoggedIn) {
      // 未登录则跳转到登录页面
      this.goToLogin();
      return;
    }

    // 跳转到搜索页面
    wx.navigateTo({
      url: '/pages/searchpage/searchpage'
    });
  },

  // 广告位点击跳转到share页面
  onGuanggaoTap: function () {
    wx.navigateTo({
      url: '/pages/share/share'
    });
  },

  // 跳转到登录页面
  goToLogin: function () {
    wx.navigateTo({
      url: '/pages/logins/logins'
    });
  },

  // 通告点击事件处理函数
  changeschool: function () {
    // 显示弹窗
    this.setData({
      showModal: true
    });

    // 添加弹出动画
    this.animation.translateY(500).step();
    this.setData({
      animation: this.animation.export()
    });

    // 然后回到原位，形成从下往上弹出的效果
    setTimeout(() => {
      this.animation.translateY(0).step();
      this.setData({
        animation: this.animation.export()
      });
    }, 10);
  },

  // 学校选择处理函数
  selectSchool: function (e) {
    const schoolId = e.currentTarget.dataset.id;
    const school = this.data.schools.find(s => s.id === schoolId);

    // 如果用户已登录，更新用户学校
    if (this.data.isLoggedIn) {
      this.updateUserSchool(schoolId, school.name || school.school_name);
    } else {
      // 未登录状态只更新显示
      this.setData({
        userSchoolId: schoolId,
        userSchoolName: school.name || school.school_name || '中南大学',
        // 更新学校列表选中状态
        schools: this.data.schools.map(s => ({
          ...s,
          selected: s.id === schoolId
        }))
      });
      this.closeModal();
    }
  },

  // 科目切换处理函数
  onSubjectTap: function (e) {
    const index = e.currentTarget.dataset.index;
    this.setData({
      selectedSubjectIndex: index
    });
    // 切换科目后加载对应科目的章节列表
    this.loadSubjectChapters(index);
  },

  /**
   * 加载指定科目的章节列表
   * @param {number} subjectIndex 科目索引
   */
  loadSubjectChapters: function (subjectIndex) {
    const that = this;
    const selectedSubject = that.data.userSubjects[subjectIndex];

    if (!selectedSubject) {
      console.error('未找到指定科目');
      return;
    }

    // 显示加载中
    wx.showLoading({
      title: '加载章节中',
    });

    // 调用API获取真实章节数据
    const app = getApp();
    app.api.getChapterList({ subjectId: selectedSubject.id })
      .then(res => {
        console.log('获取章节列表成功:', res);

        // 确保返回的数据格式正确
        const chapters = res.data || [];

        that.setData({
          chapters: chapters
        });

        wx.hideLoading();

        console.log(`已加载${selectedSubject.name}章节列表，共${chapters.length}个章节`);
      })
      .catch(err => {
        console.error('获取章节列表失败:', err);
        wx.hideLoading();

        // 错误处理
        wx.showToast({
          title: '加载章节失败',
          icon: 'none'
        });
      });
  },

  /**
   * 生成模拟章节数据
   * @param {string} subjectName 科目名称
   * @param {number} count 生成数量
   * @returns {Array} 模拟章节数据数组
   */
  generateMockChapters: function (subjectName, count) {
    const chapters = [];

    // 科目特定的章节标题前缀
    const titlePrefixes = {
      '内科学': ['呼吸系统疾病', '循环系统疾病', '消化系统疾病', '泌尿系统疾病', '内分泌系统疾病', '血液系统疾病', '神经系统疾病', '传染病学'],
      '系统解剖学': ['运动系统', '消化系统', '呼吸系统', '泌尿系统', '生殖系统', '心血管系统', '淋巴系统', '神经系统', '内分泌系统'],
      '外科学': ['外科总论', '普通外科', '骨科', '胸心外科', '神经外科', '泌尿外科', '烧伤外科', '器官移植'],
      '生理学': ['细胞生理学', '血液生理', '循环生理', '呼吸生理', '消化生理', '排泄生理', '感官生理', '神经生理'],
      '病理学': ['细胞与组织的适应和损伤', '损伤的修复', '局部血液循环障碍', '炎症', '肿瘤', '心血管系统疾病', '呼吸系统疾病', '消化系统疾病']
    };

    // 选择适合当前科目的前缀
    let prefixes = titlePrefixes[subjectName] || ['基础理论', '应用技术', '实践技能', '综合练习'];

    for (let i = 1; i <= count; i++) {
      // 选择一个合适的标题前缀
      const prefixIndex = Math.floor((i - 1) % prefixes.length);
      const chapterTitle = `${subjectName} - ${prefixes[prefixIndex]} ${Math.ceil(i / prefixes.length)}`;

      // 生成更真实的进度数据，前面的章节进度通常更高
      const baseProgress = Math.max(20, 95 - (i - 1) * 4); // 前面的章节进度更高
      const randomProgress = Math.min(100, baseProgress + Math.floor(Math.random() * 20) - 10);

      // 生成更合理的题目数量
      const total = Math.floor(Math.random() * 10) + 15; // 总题数15-24
      const completed = Math.floor(total * randomProgress / 100);

      // 根据实际数据格式生成模拟章节，添加进度相关字段
      chapters.push({
        id: i,
        name: chapterTitle,
        progress: randomProgress,
        completed: completed,
        total: total
      });
    }
    return chapters;
  },

  /**
   * 更新用户学校
   */
  updateUserSchool: function (schoolId, schoolName) {
    const that = this;
    // 调用API更新用户学校
    app.api.updateUserSchool(schoolId).then(res => {
      console.log('更新用户学校成功:', res);

      // 更新本地用户信息
      const userInfo = wx.getStorageSync('userInfo') || {};
      userInfo.school_id = schoolId;
      userInfo.school_name = schoolName;
      wx.setStorageSync('userInfo', userInfo);

      // 调用getUserInfo接口获取新学校的科目信息
      // return app.api.getUserInfo();
      that.getuser()
      that.closeModal();
    }).then(userInfoRes => {
      // console.log('获取用户信息成功:', userInfoRes);

      // // 更新页面状态
      // that.setData({
      //   userSchoolId: schoolId,
      //   userSchoolName: schoolName,
      //   userInfo: userInfoRes.data || {},
      //   userSubjects: userInfoRes.data?.subjects || [],
      //   selectedSubjectIndex: 0, // 重置科目索引
      //   schools: that.data.schools.map(item => ({
      //     ...item,
      //     selected: item.id === schoolId
      //   }))
      // });

      // wx.showToast({
      //   title: '学校切换成功',
      //   icon: 'success'
      // });

      // // 关闭弹窗
      // that.closeModal();
    }).catch(err => {
      console.error('更新用户学校失败:', err);
      // wx.showToast({
      //   title: '学校切换失败',
      //   icon: 'none'
      // });
    });
  },

  // 章节点击事件处理函数
  onChapterTap: async function (e) {
    const chapterId = e.currentTarget.dataset.id;
    const chapterName = e.currentTarget.dataset.name;
    const selectedSubject = this.data.userSubjects[this.data.selectedSubjectIndex];

    // 显示加载提示
    wx.showLoading({
      title: '准备答题卡...',
      mask: true
    });

    try {
      // 只获取或创建答题卡，不调用答题卡详情接口
      const answerCardRes = await app.api.getOrCreateAnswerCard({
        subjectId: selectedSubject.id,
        chapterId: chapterId,
        cardType: 'chapter' // 章节类型答题卡
      });

      // 直接跳转到答题页面，答题页面会自己调用getAnswerCardDetail接口
      wx.navigateTo({
        url: `/pages/slotswiper/slotswiper?chapterId=${chapterId}&chapterName=${encodeURIComponent(chapterName)}&subjectId=${selectedSubject.id}&subjectName=${encodeURIComponent(selectedSubject.name)}&answerCardId=${answerCardRes.data.card_id}&questionIndex=0`
      });

    } catch (error) {
      console.error('获取答题卡失败:', error);
      wx.showToast({
        title: '答题卡创建失败，请重试',
        icon: 'none'
      });
    } finally {
      wx.hideLoading();
    }
  },

  // 错题集点击事件处理函数
  onErrorBookTap: function () {    // 检查用户是否已登录
    if (!this.data.isLoggedIn) {
      // 未登录则跳转到登录页面
      this.goToLogin();
      return;
    }

    console.log('错题集点击事件触发');
    // 检查用户是否登录
    console.log('用户登录状态:', this.data.isLoggedIn);
    if (!this.data.isLoggedIn) {
      console.log('用户未登录，显示登录提示');
      wx.showToast({
        title: '请先登录',
        icon: 'none',
        duration: 2000
      });
      setTimeout(() => {
        console.log('跳转到登录页面');
        wx.navigateTo({
          url: '/pages/logins/logins'
        });
      }, 1500);
      return;
    }

    // 已登录则跳转到错题集首页
    console.log('用户已登录，跳转到错题集首页');
    wx.navigateTo({
      url: '/pages/errorbook/errorbook',
      success: function (res) {
        console.log('跳转成功:', res);
      },
      fail: function (err) {
        console.error('跳转失败:', err);
        wx.showToast({
          title: '跳转失败，请重试',
          icon: 'none'
        });
      }
    });
  },

  // 关闭弹窗
  closeModal: function () {
    // // 添加关闭动画
    this.animation.translateY(500).step();
    this.setData({
      animation: this.animation.export()
    });

    // 动画结束后隐藏弹窗
    setTimeout(() => {
      this.setData({
        showModal: false
      });
    }, 300);
  }
});
